<?php

namespace app\adminapi\controller;

use think\Controller;

class BaseApi extends Controller
{
    protected $no_login = ["login/login", "login/verify"];
    protected function _initialize()
    {
        parent::_initialize();
        //允许的源域名
        header("Access-Control-Allow-Origin:*");
        //允许的请求头信息
        header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Authorization");
        //允许的请求类型
        header('Access-Control-Allow-Methods: GET, POST, PUT,DELETE,OPTIONS,PATCH');
        //允许携带证书式访问（携带cookie）
        header('Access-Control-Allow-Credentials:true');
        # 登录检测
        // $this->checkLogin();
        # 权限检测
        $ret = \app\adminapi\logic\AuthLogic::AuthLogic();
        # 返回bools值 如果为false就没有权限访问 为true就接着往下执行
        if(!$ret){
            $this->fail("没有权限访问");
        }
    }
    public function checkLogin()
    {
        # 获取到请求中的控制器
        $path = strtolower(request()->controller() . "/" . request()->action());
        # 判断他请求中的控制器是登录和获取验证码地址的控制里面，如果是就往下执行，如果不是就进行检测
        if (!in_array($path, $this->no_login)) {
            # 获取到token id
            $user_id = \tools\jwt\Token::getUserId();
            # 判断他的tokenid是否存在，如果存在那就接着执行，如果不存在那就返回错误
            if (!$user_id) {
                $this->fail("未登录或token无效");
            }
            # 将id存入到请求中
            $this->request->get(["user_id" => $user_id]);
            $this->request->post(["user_id" => $user_id]);
        }
    }
    /**
     * @param int $status 响应的编码
     * @param string $msg 错误提示信息
     * @param array $data 返回的数据
     */
    public function response($status = 200, $msg = "success", $data = [])
    {
        $ret = [
            "status" => $status,
            "msg" => $msg,
            "data" => $data
        ];
        echo json_encode($ret, JSON_UNESCAPED_UNICODE);
        die;
    }
    # 成功时的响应
    public function ok($data = [], $status = 200, $msg = "success")
    {
        $this->response($status, $msg, $data);
    }
    # 失败时的响应
    public function fail($msg = "error", $status = 400)
    {
        $this->response($status, $msg);
    }
}
